home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / STRCONV.D < prev    next >
Encoding:
Modula Definition  |  1990-05-03  |  6.9 KB  |  182 lines

  1. DEFINITION MODULE StrConv;
  2.  
  3. (*
  4.  * Umwandlungsfunktionen zw. Zahlen und Strings
  5.  *)
  6.  
  7. FROM SYSTEM IMPORT LONGWORD, WORD;
  8.  
  9. FROM Strings IMPORT String;
  10.  
  11.  
  12. PROCEDURE StrToLCard ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  13.                        VAR valid : BOOLEAN ): LONGCARD;
  14.  
  15. PROCEDURE StrToCard  ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  16.                        VAR valid: BOOLEAN ): CARDINAL;
  17.  
  18. PROCEDURE StrToLInt  ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  19.                        VAR valid: BOOLEAN ): LONGINT;
  20.  
  21. PROCEDURE StrToInt   ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  22.                        VAR valid: BOOLEAN ): INTEGER;
  23.  
  24.   (*
  25.      Wenn 'valid' nach dem Aufruf FALSE ist, bedeutet das, daß der
  26.      geforderte Wert nicht ermittelt werden konnte.
  27.  
  28.      'pos' ist vor dem Aufruf auf die Stringposition zu setzen, ab der
  29.      die Zahl gelesen werden soll. Nach dem Aufruf liefert 'pos' die
  30.      Position im String, hinter der die umgewandelte Zahl endete.
  31.      Endet der String nach der Zahl, ist 'pos' = Length(str).
  32.      In der Regel ist 'pos' also vor dem Aufruf auf Null zu setzen!
  33.  
  34.      Für die vier StrTo...-Funktionen gilt:
  35.  
  36.      - führende Blanks werden ignoriert, innerhalb der Zahl dürfen
  37.        dann keine Leerzeichen mehr vorkommen.
  38.      - ein eventuell vorangestelltes '+' wird ignoriert.
  39.      - Präfixe steuern die Interpretation der folgenden Zeichen:
  40.        '$' für Hexadezimal, '%' für Binär, kein Präfix bedeutet
  41.        dezimal.
  42.      - Bei StrToInt bzw. StrToLInt muß das '-' zuerst stehen, erst
  43.        dann darf der Präfix folgen
  44.        
  45.      Beispiele: StrToCard ('  123 12') = 123
  46.                 StrToLInt ('-$80') = -128L
  47.   *)
  48.  
  49. PROCEDURE StrToLNum (REF str   : ARRAY OF CHAR;
  50.                          base  : CARDINAL; (* [2..36] *)
  51.                      VAR pos   : CARDINAL;
  52.                      VAR valid : BOOLEAN ): LONGCARD;
  53.  
  54. PROCEDURE StrToNum (REF str   : ARRAY OF CHAR;
  55.                         base  : CARDINAL; (* [2..36] *)
  56.                     VAR pos   : CARDINAL;
  57.                     VAR valid : BOOLEAN ): CARDINAL;
  58.  
  59.  
  60. PROCEDURE StrToReal ( REF str: ARRAY OF CHAR; VAR pos: CARDINAL;
  61.                       VAR valid: BOOLEAN ): LONGREAL;
  62.  
  63.   (*
  64.     StrToReal liefert den Wert einer reellen Zahl. Dabei darf entweder der
  65.     Nachkommateil (einschließlich '.') oder der Vorkommateil fehlen. Ebenfalls
  66.     braucht kein Exponent angegeben werden. Ein eventueller Skalierungsfaktor
  67.     wird durch ein vorangestelltes 'E' erkannt und darf im Bereich von -1232
  68.     bis +1232 liegen.
  69.  
  70.     Es gilt:
  71.     
  72.     - führende Blanks werden ignoriert, innerhalb der Zahl dürfen
  73.       dann keine Leerzeichen mehr vorkommen.
  74.     - ein eventuell vorangestelltes '+' wird ignoriert.
  75.     - 'ThousandsChar' werden überlesen.
  76.     
  77.     z.B. : StrToReal ('123E12') = 1.23 E14
  78.            StrToReal ('.012E-23') = 1.2 E-25
  79.   *)
  80.  
  81.  
  82.  
  83. (* ======================================================================= *
  84.  * Es folgen Funktionen zur Umwandlung von Zahlen in Strings. Dabei gilt   *
  85.  * allgemein:                                                              *
  86.  * - 'spc' bestimmt die Mindestlänge des resultierenden Strings 'str'.     *
  87.  * ======================================================================= *)
  88.  
  89.  
  90. PROCEDURE CardToStr ( v: LONGCARD; spc: CARDINAL): String;
  91. PROCEDURE IntToStr  ( v: LONGINT;  spc: CARDINAL): String;
  92.  
  93.   (*
  94.     Die ...ToStr-Funktionen wandeln eine Zahl in einen String um. Dabei steht
  95.     ein eventuelles Minuszeichen direkt vor der ersten Ziffer. Falls die Zahl
  96.     weniger Stellen (inklusive Vorzeichen) als in 'spc' angegeben haben sollte,
  97.     so werden entsprechend viele Leerzeichen vorangestellt.
  98.     
  99.     z.B. : CardToStr (123,10) = '       123'
  100.            IntToStr (-2345,2) = '-2345'
  101.   *)
  102.  
  103. PROCEDURE LHexToStr ( v: LONGWORD; spc: CARDINAL): String;
  104. PROCEDURE HexToStr  ( v: WORD;     spc: CARDINAL): String;
  105. PROCEDURE LBinToStr ( v: LONGWORD; spc: CARDINAL): String;
  106. PROCEDURE BinToStr  ( v: WORD;     spc: CARDINAL): String;
  107.  
  108.   (*
  109.     Die Hex- und Bin-Funktionen erzeugen, wie der Name sagt, Strings in
  110.     hexadezimaler bzw. binärer Repräsentation. Es werden nur positive Zahlen
  111.     erzeugt. Zu Beachten ist, daß den Zahlen dabei ein '$' bzw. '%' vorange-
  112.     stellt wird und dieses Zeichen auch mit zur Mindestlängenangabe 'spc' zählt.
  113.     Ggf. ist das vorangestellte Zeichen mit der Funktion 'Strings.Delete' zu
  114.     entfernen. Führende Nullen werden nicht unterdrückt.
  115.     
  116.     z.B.: HexToStr (128,4)  = '$080'
  117.           HexToStr (128,0)  = '$80'
  118.           LHexToStr (-1L,0) = '$FFFFFFFF' (8 Ziffern)
  119.           BinToStr (100,9)  = '%01100100'
  120.           LBinToStr (-1L,1) = '%11111111111111111111111111111111' (32 Ziffern)
  121.   *)
  122.  
  123. PROCEDURE LNumToStr (    lnum : LONGWORD;
  124.                          base : CARDINAL; (* [2..36] *)
  125.                          space: CARDINAL;
  126.                          fill : CHAR    ): String;
  127.  
  128. PROCEDURE NumToStr (    num  : WORD;
  129.                         base : CARDINAL; (* [2..36] *)
  130.                         space: CARDINAL;
  131.                         fill : CHAR    ): String;
  132.   (*
  133.    * 'fill' bestimmt das Zeichen, mit dem ggf. vorn aufgefüllt wird.
  134.    *)
  135.  
  136. PROCEDURE FloatToStr ( v: LONGREAL; spc, n:CARDINAL): String;
  137.  
  138.   (*
  139.     Durch diese Funktion wird die Zahl 'v' in wissenschaftlicher Notation dar-
  140.     gestellt. Es wird eine Vorkommastelle und 'n' Nachkommastellen, gefolgt von
  141.     'E', dem Vorzeichen des Skalierungsfaktors und dem vierstelligen Wert.
  142.     Ggf. wird der String links mit Leerzeichen bis zur Länge 'spc' aufgefüllt.
  143.     
  144.     z.B. : FloatToStr (0.0123,12,1) = '   1.2E-0002'
  145.            FloatToStr (9.9,0,10) = '9.9000000000E+0000'
  146.   *)
  147.  
  148. PROCEDURE FixToStr ( v: LONGREAL; spc, n:CARDINAL): String;
  149.  
  150.   (*
  151.     Diese Funktion stellt 'v' in Festpunktnotation dar, wobei entsprechend viele
  152.     Vorkommastellen, jedoch nur genau 'n' Nachkommastellen gebracht werden.
  153.     Wenn der String kürzer als 'spc' sein sollte, so werden entsprechend viele
  154.     Leerzeichen vorangestellt.
  155.     
  156.     z.B. : FixToStr (0.0123,12,1) = '         0.0'
  157.            FixToStr (9.9,0,10) = '9.9000000000'
  158.   *)
  159.  
  160. PROCEDURE RealToStr( v: LONGREAL; spc, n: CARDINAL): String;
  161.  
  162.   (*
  163.     Diese Prozedur verwendet je nach Lage des Wertes 'v' innerhalb der Werte
  164.     von FixToFloatMin und FixToFloatMax (aus 'MOSConfig') das Festkomma- oder
  165.     Fließkomma-Format zur Darstellung von 'v'.
  166.   *)
  167.   
  168. PROCEDURE EngToStr ( v: LONGREAL; spc, n:CARDINAL): String;
  169.  
  170.   (*
  171.     Durch diese Funktion wird die Zahl 'v' in Ingenieur-Notation dargestellt.
  172.     Es werden bis zu drei Vorkommastellen und 'n' Nachkommastellen, gefolgt
  173.     von 'E', dem Vorzeichen des Skalierungsfaktors und dem vierstelligen Wert,
  174.     der immer ein Vielfaches von Drei ist. Ggf. wird der String links mit Leer-
  175.     zeichen bis zur Länge 'spc' aufgefüllt.
  176.     
  177.     z.B. : EngToStr (0.0123,12,1) = '  12.3E-0003'
  178.            EngToStr (9.9,0,10) = '9.9000000000E+0000'
  179.   *)
  180.  
  181. END StrConv.
  182.